home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / HTML / Menu / DirectRenderer.php < prev    next >
PHP Script  |  2004-03-24  |  6KB  |  179 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2003 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Ulf Wendel <ulf.wendel@phpdoc.de>                           |
  17. // |          Sebastian Bergmann <sb@sebastian-bergmann.de>               |
  18. // |          Alexey Borzov <avb@php.net>                                 |
  19. // +----------------------------------------------------------------------+
  20. //
  21. // $Id: DirectRenderer.php,v 1.3 2004/01/18 17:35:52 avb Exp $
  22. //
  23.  
  24. require_once 'HTML/Menu/Renderer.php';
  25.  
  26. /**
  27.  * The renderer that generates HTML for the menu all by itself.
  28.  * 
  29.  * Inspired by HTML_Menu 1.0 code
  30.  * 
  31.  * @version  $Revision: 1.3 $
  32.  * @author   Ulf Wendel <ulf.wendel@phpdoc.de>
  33.  * @author   Alexey Borzov <avb@php.net>
  34.  * @access   public
  35.  * @package  HTML_Menu
  36.  */
  37. class HTML_Menu_DirectRenderer extends HTML_Menu_Renderer
  38. {
  39.    /**
  40.     * Generated HTML for the menu
  41.     * @var string
  42.     */
  43.     var $_html = '';
  44.  
  45.    /**
  46.     * Generated HTML for the current menu "table"
  47.     * @var string
  48.     */
  49.     var $_tableHtml = '';
  50.     
  51.    /**
  52.     * Generated HTML for the current menu "row"
  53.     * @var string
  54.     */
  55.     var $_rowHtml = '';
  56.  
  57.    /**
  58.     * The HTML that will wrap around menu "table"
  59.     * @see setMenuTemplate()
  60.     * @var array
  61.     */
  62.     var $_menuTemplate = array('<table border="1">', '</table>');
  63.  
  64.    /**
  65.     * The HTML that will wrap around menu "row"
  66.     * @see setRowTemplate()
  67.     * @var array
  68.     */
  69.     var $_rowTemplate = array('<tr>', '</tr>');
  70.  
  71.    /**
  72.     * Templates for menu entries
  73.     * @see setEntryTemplate()
  74.     * @var array
  75.     */
  76.     var $_entryTemplates = array(
  77.         HTML_MENU_ENTRY_INACTIVE    => '<td>{indent}<a href="{url}">{title}</a></td>',
  78.         HTML_MENU_ENTRY_ACTIVE      => '<td>{indent}<b>{title}</b></td>',
  79.         HTML_MENU_ENTRY_ACTIVEPATH  => '<td>{indent}<b><a href="{url}">{title}</a></b></td>',
  80.         HTML_MENU_ENTRY_PREVIOUS    => '<td><a href="{url}"><< {title}</a></td>',
  81.         HTML_MENU_ENTRY_NEXT        => '<td><a href="{url}">{title} >></a></td>',
  82.         HTML_MENU_ENTRY_UPPER       => '<td><a href="{url}">^ {title} ^</a></td>',
  83.         HTML_MENU_ENTRY_BREADCRUMB  => '<td><a href="{url}">{title}</a> >> </td>'
  84.     );
  85.  
  86.     function finishMenu($level)
  87.     {
  88.         $this->_html     .=  $this->_menuTemplate[0] . $this->_tableHtml . $this->_menuTemplate[1];
  89.         $this->_tableHtml = '';
  90.     }
  91.  
  92.     function finishRow($level)
  93.     {
  94.         $this->_tableHtml .= $this->_rowTemplate[0] . $this->_rowHtml . $this->_rowTemplate[1];
  95.         $this->_rowHtml    = '';
  96.     }
  97.  
  98.     function renderEntry($node, $level, $type)
  99.     {
  100.         $keys = array('{indent}');
  101.         if ('tree' == $this->_menuType || 'sitemap' == $this->_menuType) {
  102.             $values = array(str_repeat('   ', $level));
  103.         } else {
  104.             $values = array('');
  105.         }
  106.         foreach ($node as $k => $v) {
  107.             if ('sub' != $k) {
  108.                 $keys[]   = '{' . $k . '}';
  109.                 $values[] = $v;
  110.             }
  111.         }
  112.         $this->_rowHtml .= str_replace($keys, $values, $this->_entryTemplates[$type]);
  113.     }
  114.  
  115.  
  116.    /**
  117.     * returns the HTML generated for the menu
  118.     *
  119.     * @access public
  120.     * @return string
  121.     */
  122.     function toHtml()
  123.     {
  124.         return $this->_html;
  125.     } // end func toHtml
  126.  
  127.  
  128.    /**
  129.     * Sets the menu template (HTML that wraps around rows)
  130.     *  
  131.     * @access public
  132.     * @param  string    this will be prepended to the rows HTML
  133.     * @param  string    this will be appended to the rows HTML
  134.     */
  135.     function setMenuTemplate($prepend, $append)
  136.     {
  137.         $this->_menuTemplate = array($prepend, $append);
  138.     }
  139.  
  140.  
  141.    /**
  142.     * Sets the row template (HTML that wraps around entries)
  143.     *  
  144.     * @access public
  145.     * @param  string    this will be prepended to the entries HTML
  146.     * @param  string    this will be appended to the entries HTML
  147.     */
  148.     function setRowTemplate($prepend, $append)
  149.     {
  150.         $this->_rowTemplate = array($prepend, $append);
  151.     }
  152.  
  153.  
  154.    /**
  155.     * Sets the template for menu entry.
  156.     * 
  157.     * The template should contain at least the {title} placeholder, can also contain
  158.     * {url} and {indent} placeholders, depending on entry type.
  159.     * 
  160.     * @access public
  161.     * @param  mixed     either type (one of HTML_MENU_ENTRY_* constants) or an array 'type' => 'template'
  162.     * @param  string    template for this entry type if $type is not an array
  163.     */
  164.     function setEntryTemplate($type, $template = null)
  165.     {
  166.         if (is_array($type)) {
  167.             // array_merge() will not work here: the keys are numeric
  168.             foreach ($type as $typeId => $typeTemplate) {
  169.                 if (isset($this->_entryTemplates[$typeId])) {
  170.                     $this->_entryTemplates[$typeId] = $typeTemplate;
  171.                 }
  172.             }
  173.         } else {
  174.             $this->_entryTemplates[$type] = $template;
  175.         }
  176.     }
  177. }
  178. ?>
  179.